package pl.peterjack.servlet.uslugi;

import java.io.IOException;
import java.io.StringReader;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;

import pl.peterjack.SystemTools;
import pl.peterjack.model.PMF;
import pl.peterjack.model.dane.Firma;
import pl.peterjack.model.dane.Klient;
import pl.peterjack.model.dane.Pracownik;
import pl.peterjack.model.dane.PracownikUprawnienia;
import pl.peterjack.model.dane.Produkt;
import pl.peterjack.model.dane.RezultatOdpowiedz;
import pl.peterjack.servlet.dane.firma.FirmaDane;
import au.com.bytecode.opencsv.CSVReader;

import com.google.appengine.api.datastore.Key;
import com.google.gson.Gson;

public class Export extends HttpServlet {
	
	Log log = new LogFactoryImpl().getInstance(FirmaDane.class);

	@SuppressWarnings("unchecked")
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Pracownik pracownik = (Pracownik) req.getSession().getAttribute("firma_pracownik");
		PracownikUprawnienia pracownikUprawnienie = null;
		if (pracownik != null && pracownik.getPracownikUprawnienia() != null
				&& pracownik.getPracownikUprawnienia().longValue() > 0) {
			pracownikUprawnienie = pm.getObjectById(PracownikUprawnienia.class,
					pracownik.getPracownikUprawnienia());
		}
		if (req.getSession().getAttribute("firma_klient") != null
				|| !(pracownik == null || pracownikUprawnienie == null || (pracownikUprawnienie
						.getImportDanych() != null && pracownikUprawnienie.getImportDanych()
						.booleanValue()))) {
			req.getSession().invalidate();
			resp.setContentType("text/plain");
			resp.setStatus(resp.SC_MOVED_TEMPORARILY);
			resp.setHeader("Location", "/");
			return;
		}
		Firma firma = (Firma) req.getSession().getAttribute("firma");
		Klient klient = null;
		RezultatOdpowiedz result = new RezultatOdpowiedz();
	    Gson gson = new Gson();
	    String zawartoscCSV = req.getParameter("zawartoscCSV")+""; 
	    String typ = req.getParameter("typ")+""; 
	    int nazwa = SystemTools.parseInteger(req.getParameter("nazwa")+""); 
	    int cenaNetto = SystemTools.parseInteger(req.getParameter("cenaNetto")+"");
	    int procentVat = SystemTools.parseInteger(req.getParameter("procentVat")+"");
	    int cenaBrutto = SystemTools.parseInteger(req.getParameter("cenaBrutto")+""); 
	    String separator = req.getParameter("separator"); 
	    CSVReader reader = new CSVReader(new StringReader(zawartoscCSV), separator.charAt(0));
	    String [] nextLine;
	    result.setSuccess(true);
	    StringBuilder sb = new StringBuilder();
	    int maksymalnaKolumna = SystemTools.maxValueFromArray(new int[]{nazwa, cenaNetto, procentVat, cenaBrutto }); 
    	List<Produkt> results = null;
	    Query query = pm.newQuery(Produkt.class, "firma == firmaPodana");
		query.declareParameters(Key.class.getName() + " firmaPodana");
		results = (List<Produkt>) query.execute(firma.getId());
		for (Produkt p:results) {
			for (int i = 0; i < maksymalnaKolumna; i++) {
				sb.append("\""); 
				if (i==nazwa-1) {
					sb.append(p.getNazwa()); 
				} else if (i==cenaNetto-1) {
					sb.append(p.getCenaNetto());
				} else if (i==cenaBrutto-1) {
					sb.append(p.getCenaBrutto()); 
				} else if (i==procentVat-1) {
					sb.append(p.getProcentVat());
				}
				sb.append("\"");
				if(i+1!=maksymalnaKolumna) {
					sb.append(separator);
				}
			}
			sb.append("\n"); 
		}
        pm.close();
	    result.setData( sb ); 
		//resp.setContentType("application/json");
	    resp.setCharacterEncoding("UTF-8");
        resp.getWriter().println(gson.toJson(result));
	}

	

}

